<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
  <head>
    <title>Upgrading DisOrder</title>
    <link rel=StyleSheet type="text/css" href="docs.css">
  </head>
  <body>
    <h1>Upgrading DisOrder</h1>

    <ul>
      <li><a href="#deb">.deb Installs</a></li>
      <li><a href="#source">Source Installs</a></li>
      <li><a href="#ver">Version-Specific Details</a></li>
    </ul>

    <h2><a name="deb">.deb Installs</a></h2>

    <h3>Take A Backup</h3>
    
    <p>You should make a backup of DisOrder's databases before proceeding with
    any upgrade.  You can generate a backup as follows:</p>

    <pre># disorder-dump --dump <i>PATH</i></pre>

    <p>where <i>PATH</i> is the filename to write the backup to.</p>

    <p>As of version 5.1, the Debian version of the server will take a daily
    backup of its databases to <tt>/var/lib/disorder/backups</tt>, so it should
    not be a disaster if you neglect this step in <i>subsequent</i>
    upgrades.</p>

    <h3>Install The New Packages</h3>

    <pre># dpkg -i *.deb</pre>

    <h3>Upgrade Databases</h3>

    <p>If you have changed version of <tt>libdb</tt> then the new one may not
    be compatible with the old one's file format.  In this case the server will
    not start, causing the upgrade to fail.  Remove the database files and
    restore from the backup you took above.</p>

    <pre># rm /var/lib/disorder/*
# disorder-dump --restore PATH
# dpkg --configure -a</pre>

    <h2><a name=source>Source Installs</a></h2>

    <h3>Take A Backup</h3>

    <p>You should make a backup of DisOrder's databases before proceeding with
    any upgrade.  You can generate a backup as follows:</p>

    <pre># disorder-dump --dump PATH</pre>

    <p>where PATH is the filename to write the backup to.</p>

    <h3>Stop The Server</h3>

    <p>Linux:</p>

    <pre># /etc/init.d/disorder stop</pre>

    <p>Mac:</p>

    <pre># launchctl stop uk.org.greenend.rjk.disorder
# launchctl unload /Library/LaunchDaemons/uk.org.greenend.rjk.disorder.plist</pre>

    <p>If you are feeling cautious you can also make an exact copy of the
    database files at this point (they are in
    <tt>/usr/local/var/disorder</tt>).</p>

    <h3>Build And Install The New Version</h3>

    <p>See the top-level <a href="README">README</a>.</p>

    <h3>Update Configuration Files</h3>

    <p>See version-specific information below.</p>

    <h3>Upgrade Databases</h3>

    <p>If you have changed version of <tt>libdb</tt> you may need to remove the
    database files and restore from the backup you took above.</p>

    <pre># rm /usr/local/var/disorder/*
# disorder-dump --restore PATH</pre>

    <h3>Restart The Server</h3>

    <p>Linux:</p>

    <pre># /etc/init.d/disorder start</pre>

    <p>Mac:</p>

    <pre># cp examples/uk.org.greenend.rjk.disorder.plist /Library/LaunchDaemons/.
# launchctl load /Library/LaunchDaemons
# launchctl start uk.org.greenend.rjk.disorder</pre>

    <h1><a name=ver>Version-Specific Details</a></h1>

    <h2>4.x -> 5.0</h2>

    <h3>Web Confirmation Strings</h3>

    <p>The syntax of confirmation strings for online registrations has changed
    and old ones no longer work.  This only affects users who registered before
    the upgrade but have not yet confirmed their login.  You can delete such
    half-created users with 'disorder deluser USERNAME' (as an administrative
    user, for instance as root on the server) and they can start the
    registration process again.</p>

    <h3>Handling Of Configuration Changes</h3>

    <p>There is a new mechanism to ensure that the search database and aliases
    are reconstructed if any options that affect them change.  Unfortunately
    this means that the reconstruction step always takes place on upgrade from
    4.3 or earlier, as those versions don't record sufficient information for
    the server to tell whether it needs to reconstruct or not.</p>

    <p>The result will be a log message of the form:</p>

    <pre>new database parameter string dbparams-0-sha256:61609f3e6395ec8dee317ee216fe2848d70c249d347dd03c6a219441a13dd456 - removing old data</pre>

    <p>...and a slower rescan on startup.  Subsequent restarts should not have
    this problem (unless of course you change a relevant option).</p>

    <h3>Deprecation Notices</h3>

    <p>The player <tt>--wait-for-device</tt> option is deprecated and will be
    removed in a future version.</p>

    <p>The 'lock' option no longer does anything.  You must delete it from any
    configuration files that contain it.  The full set of deprecated options
    is:</p>

    <ul>
    <li>allow</li>
    <li>gap</li>
    <li>lock</li>
    <li>prefsync</li>
    <li>restrict</li>
    <li>trust</li>
        </ul>

    <p>(As of 5.1 these options are completely gone.)</p>

    <h2>3.0 -> 4.x</h2>

    <p>If you customized any of the templates, you will pretty much have to
    start from scratch as the web interface has been rewritten.  See
    disorder.cgi(8) for a starting point.</p>

    <p>The 'gap' directive will no longer work.  You must delete it from any
    configuration files that contain it.</p>

    <p>You may prefer to remove any 'smtp_server' directive you have, as the
    web interface will now use the local sendmail executable if available.</p>

    <p>If you want to be able to do use management over non-local connections
    (thereby potentially exposing passwords!) you must set 'remote_userman' to
    'yes'.</p>

    <h2>2.0 -> 3.0</h2>

    <h3>Authentication</h3>

    <p>Users are now stored in the database rather than in 'allow' directives
    in a private configuration file.  'allow' is still understood in this
    version, but is only used to populate the database on startup.  After the
    first (successful) run of the server the remaining 'allow' directives
    should be deleted.</p>

    <p>'restrict' and 'trust' are replaced by a system of per-user rights.  The
    default user rights are based on the 'restrict' setting, and the rights of
    users created frow 'allow' directives preserve the meaning of 'trust', but
    after the first run you should remove these directives and (optionally) add
    a 'default_rights' directive.</p>

    <p>'allow', 'restrict' and 'trust' will stop working entirely in a future
    version but for now they will generate harmless error messages.  Remove
    them and the error messages will go away.</p>

    <p>(Note: these options, and the code for upgrading old users, has been
    removed entirely in release 5.1.  You must either manually re-create your
    users, or upgrade via 5.0.3.)</p>

    <p>See README for new setup instructions for the web interface.</p>

    <h3>Other Server Configuration</h3>

    <p>Sensible defaults for 'stopword', 'player' and 'tracklength' are now
    built into the server.  If you haven't modified the values from the example
    or Debian configuration files then you can remove them.</p>

    <p>'gap' now defaults to 0 seconds instead of 2.</p>

    <p>The sound output API is now configured with the 'api' command although
    'speaker_backend' still works.  If you use 'api alsa' then you may need to
    change your 'mixer' and 'channel' settings.</p>

    <h3>Web Interface</h3>

    <p>The web interface no longer uses HTTP basic authentication and the web
    server configuration imposing access control on it should be removed.
    Users now log in using their main DisOrder password and the one in the
    htpassed file is now obsolete.  You should revisit the web interface setup
    instructions in README from scratch.</p>

    <p>As part of this, the DisOrder URL has changed from (e.g.)</p>

    <pre>http://yourserver/cgi-bin/disorder/disorder</pre>

    <p>to just</p>

    <pre>http://yourserver/cgi-bin/disorder</pre>

    <h3>Checklist</h3>

    <ul>
    <li>delete default 'stopword', 'player' and 'tracklength' directives</li>
    <li>set 'gap' if you want a non-0 inter-track gap</li>
    <li>set 'api' and maybe 'mixer' and 'channel'</li>
    <li>perhaps add 'default_rights' directive</li>
    <li>delete 'allow', 'restrict' and 'trust' directives after first run</li>
    <li>follow new web interface setup in README</li>
        </ul>

    <h2>1.4/1.5 -> 2.0</h2>

    <h3>'transform' and 'namepart' directives</h3>

    <p>'transform' has moved from the web options to the main configuration
    file, so that they can be used by other interfaces.  The syntax and
    semantics are unchanged.</p>

    <p>More importantly however both 'transform' and 'namepart' are now
    optional, with sensible defaults being built in.  So if you were already
    using the default values you can just delete all instances of both.</p>

    <p>See disorder_config(5) for the default values.  Hopefuly they will be
    suitable for many configurations.  Please do send feedback.</p>

    <h3>'enabled' and 'random_enabled' directives</h3>

    <p>These have been removed.  Instead the state persists from one run of the
    server to the next.  If they appear in your configuration file they must be
    removed; the server will not start if they are present.</p>

    <h3>Database upgrade</h3>

    <p>It is strongly recommended that you back up your database before
    performing the upgrade.  For example, as root, with the server STOPPED:</p>

    <pre># cd /var/disorder
# mkdir BACKUP
# cp -p * BACKUP</pre>

    <p>To restore, again as root:</p>
    <pre># cd /var/disorder
# rm *
# cp -p BACKUP/* .</pre>

    <p>The first thing the server does when upgrading from 1.5 is run the
    disorder-dbupgrade program.  This is necessary to modify any non-ASCII
    track names to meet the latest version's stricter normalization practices.
    The upgrade should succeed automtically; if not it should leave an error
    message in syslog.</p>

    <h2>1.3 -> 1.4</h2>

    <h3>Raw Format Decoders</h3>

    <p>You will probably want reconfigure your install to use the new
    facilities (although the old way works fine).  See the example
    configuration file and README.raw for more details.</p>

    <p>Depending on how your system is configured you may need to link the
    disorder libao driver into the right directory:</p>

    <pre># ln -s /usr/local/lib/ao/plugins-2/libdisorder.so /usr/lib/ao/plugins-2/.</pre>

    <h2>1.2 -> 1.3</h2>

    <h3>Server Environment</h3>

    <p>It is important that $sbindir is on the server's path.  The example init
    script guarantees this.  You may need to modify the installed one.  You
    will get "deadlock manager unexpectedly terminated" if you get this
    wrong.</p>

    <h3>namepart directives</h3>

    <p>These have changed in three ways.</p>

    <p>Firstly they have changed to substitute in a more convenient way.
    Instead of matches for the regexp being substituted back into the original
    track name, the replacement string now completely replaces it.  Given the
    usual uses of namepart, this is much more convenient.  If you've stuck with
    the defaults no changes should be needed for this.</p>

    <p>Secondly they are matched against the track name with the collection
    root stripped off.</p>

    <p>Finally you will need to add an extra line to your config file as
    follows for the new track aliasing mechanisms to work properly:</p>

    <pre>namepart        ext     "(\\.[a-zA-Z0-9]+)$"                   "$1"    *</pre>

    <h2>1.1 -> 1.2</h2>

    <h3>Web Interface Changes</h3>

    <p>The web interface now includes static content as well as templates.  The
    static content must be given a name visible to HTTP clients which maps to
    its location in the real filesystem.</p>

    <p>The README suggests using a rule in httpd.conf to make /static in the
    HTTP namespace point to /usr/local/share/disorder/static, which is where
    DisOrder installs its static content (by default).  Alternatively you can
    set the url.static label to the base URL of the static content.</p>

    <h3>Configuration File Changes</h3>

    <p>The trackname-part web interface directive has now gone, and the
    options.trackname file with it.</p>

    <p>It is replaced by a new namepart directive in the main configuration
    file.  This has exactly the same syntax as trackname-part, only the name
    and location have changed.</p>

    <p>The reason for the change is to allow track name parsing to be centrally
    configured, rather than every interface to DisOrder having to implement it
    locally.</p>

    <p>If you do not install new namepart directives into the main
    configuration file then track titles will show up blank.</p>

    <p>If you do not remove the trackname-part directives from the web
    interface configuration then you will get error messages in the web
    server's error log.</p>

  </body>
</html>

<!-- Local Variables: -->
<!-- fill-column:79 -->
<!-- End: -->
